查看原文
其他

关于 ASM 中出现 'DB_UNKNOWN' 目录的说明

JiekeXu JiekeXu DBA之路 2024-03-03

作者 | JiekeXu

来源 | JiekeXu DBA之路(ID: JiekeXu_IT)

大家好,我是 JiekeXu,很高兴又和大家见面了,今天和大家一起聊聊 关于 ASM 中出现 'DB_UNKNOWN' 目录的情况,欢迎点击上方蓝字关注我,标星或置顶,更多干货第一时间到达!

之前在运维 Oracle 数据库时,进入 ASM 有时候会看到 ‘DB_UNKNOWN’ 的目录,那时候是 11204 的库,数据库较多,也没有深入研究,上次搭建 19C MAA 时备库也出现了 ‘DB_UNKNOWN’ 的目录,当时搭建时注册数据库加了密码文件也没出现问题,不过就是看着碍眼,但也没有深入研究就已经匆匆离职了。新公司刚好有一套 19c 的库要迁移, 计划搭建 ADG 去切换,刚好构成 19C 的 MAA 去折腾一下了,MAA 搭建的文章可点击此处查看,一直忙其他的事情,前几天有一位网友加微信告诉我说 ‘DB_UNKNOWN’ 是错误的,那么乘着这次机会一起看看吧。


ASMCMD> pwcopy /tmp/pw<database> +DATA/<database>/PASSWORD/pwd<database>
copying /tmp/pw<database> -> +DATA/<database>/PASSWORD/pwd<database>
ASMCMD> ls -l
Type Redund Striped Time Sys Name
PASSWORD UNPROT COARSE NOV 16 16:00:00 N pwd<database> =>
+DATA/DB_UNKNOWN/PASSWORD/pwddb_unknown.256.960224193

用 pwcopy 拷贝密码文件时,数据库资源不在 CRS 上。会出现如下错误:

[grid@<host1> ~]$ crsctl stat res ora.<database>.db -t
CRS-2613: Could not find resource 'ora.<database>.db'.


当数据库资源不在 CRS 上,并且 pwcopy 命令中没有指定 “--dbuniquename” 选项时,密码文件将创建在 ‘DB_UNKNOWN’ 目录下,因为 pwcopy 无法获得数据库名称。如果指定了 “--dbuniquename”,密码文件将在 “--dbuniquename” 选项指定的数据库名称目录中创建。当 DB 资源存在于 CRS 上时,即使 pwcopy 命令中没有指定 “--dbuniquename” 选项,也没有观察到 “DB_UNKNOWN”,因为 DB 名可以从 CRS 中获取。

所以解决办法无非就两种,要么添加 --dbuniquename 参数,要么将数据库注册到 CRS 集群。那个朋友说错误的,其实是他没看完文章,我就是用第二种方法注册的集群,这里感谢提出的问题以及分享的 MOS 文章,收获颇丰。

[grid@<host1> ~]$ asmcmd
ASMCMD> pwcopy --dbuniquename JIEKESTB /tmp/pwJIEKESTB
+DATAP/JIEKESTB/PASSWORD/pwdJIEKESTB
PRCD-1120 : The resource for database JIEKESTB could not be found.
PRCR-1001 : Resource ora.JIEKESTB.db does not exist
ASMCMD-9457: an internally issued srvctl command failed with errors
copying /tmp/pwJIEKESTB -> +DATAP/JIEKESTB/PASSWORD/pwdJIEKESTB
ASMCMD-9453: failed to register password file as a CRS resource

Note: These errors are expected due to "JIEKESTB" is not present on CRS.

ASMCMD> ls -l
Type Redund Striped Time Sys Name
PASSWORD UNPROT COARSE NOV 16 17:00:00 N pwdJIEKESTB =>
+DATAP/<database>/PASSWORD/pwdJIEKESTB.256.960224879
PASSWORD UNPROT COARSE NOV 16 17:00:00 Y pwdJIEKESTB.256.960224879

当然有时候通过 pfile 拷贝 spfile 到 ASM 时也会出现 “DB_UNKNOWN” 的目录,如下:

Example:
SQL> create spfile='+ASMDATA' from pfile='$ORACLE_HOME/dbs/initTEST.ora';
File created.
SQL>exit;
ASMCMD> pwd
+ASMDATA/TEST
ASMCMD> ls -l
Type Redund Striped Time Sys Name N spfiletest.ora
=>+ASMDATA/DB_UNKNOWN/PARAMETERFILE/SPFILE.393.668068961

当我们无法查找数据库名称时,将使用 DB_UNKNOWN 子目录作为占位符。当使用 NOMOUNT 选项启动数据库实例或关闭数据库实例时,就会出现这种情况。在这种情况下,无法读取数据库名,我们使用 DB_UNKNOWN 子目录来存储新的 SPFILE。

解决办法就是移除 DB_UNKNOWN 重新指定全路径创建 spfile.

1. Remove the file from the DB_UNKNOWN location.
Example:
SQL> alter diskgroup ASMDATA drop file '+ASMDATA/DB_UNKNOWN/PARAMETERFILE/SPFILE.393.668068961';
2. Re-create the SPFILE within the proper location.
Therefor you have to specify explicitely the <DB_NAME>/PARAMETERFILE and the filename of the new SPFILE within the CREATE SPFILE command.
Besides you have to pre-create these directories if they are not available already.
Example:
SQL> create spfile='+ASMDATA/TEST/PARAMETERFILE/spfiletest.ora' from pfile='$ORACLE_HOME/dbs/initTEST.ora';

他提到密码文件还有一个问题,当主备库密码格式不一致时,主备切换就会报 “ORA-46952” 错误。ORA-46952: standby database format mismatch for password file ‘XXX’,只有保证主备库的密码文件的 format 一致才能正常切换。从 12C 开始后有一个视图 v$passwordfile_info 可查看密码文件位置以及对应的 FORMAT 格式。

[oracle@jiekexu ~]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Mon May 31 18:28:45 2021
Version 19.4.0.0.0

Copyright (c) 1982, 2019, Oracle. All rights reserved.

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.4.0.0.0

SQL> set line 456
SQL> col FILE_NAME for a50
SQL> select * from v$passwordfile_info;
FILE_NAME FORMAT IS_AS CON_ID
-------------------------------------------------- ------ ----- ----------
+DATA/EDW/PASSWORD/pwdetest.256.1031587259 12 TRUE 0

Elapsed: 00:00:00.41

查看主备库的 format 格式果然不一致,一个是 12,另一个是 12.2;当使用 orapwd 创建密码文件时默认的 format 为 12.2。

这种创建出来的 format 为 12.2orapwd asm=n input_file=’/home/oracle/orapwjiekedb’ file=’/u01/app/oracle/product/19c/dbhome_1/dbs/orapwjiekedb’这种指定的 format 为 12orapwd asm=n input_file=’/home/oracle/orapwjiekedb’ file=’/u01/app/oracle/product/19c/dbhome_1/dbs/orapwjiekedb’ format=12
orapw
format - use format=12 for new 12c features like SYSBACKUP, SYSDG
and SYSKM support, longer identifiers, SHA2 Verifiers etc.
use format=12.2 for 12.2 features like enforcing user
profile (password limits and password complexity) and
account status for administrative users.
If not specified, format=12.2 is default (optional)

最后在啰嗦一句,当备库创建完成后,如果主库密码文件有改动时可自动同步到备库,不过除了 far aync 方式外。

好了,小伙伴们今天就到此为止了。如果此文对您有帮助,欢迎点赞、在看与转发,写作不易,举手之劳,便是对作者最大的支持,也能让更多的人受益。

参考文档:
SPFILE of a DB instance will be created within ‘DB_UNKNOWN’ directory on ASM storage (Doc ID 743073.1)
‘DB_UNKNOWN’ directory was created when using asmcmd pwcopy (Doc ID 2329386.1)
Data Guard Standby Automatic Password file Synchronization in 12.2 (Doc ID 2307365.1)

————————————————————————————
公众号:JiekeXu DBA之路
墨天轮:https://www.modb.pro/u/4347
CSDN :https://blog.csdn.net/JiekeXu
腾讯云:https://cloud.tencent.com/developer/user/5645107

————————————————————————————



Oracle 12c 及以上版本补丁更新说明及下载方法(收藏版)

Oracle 19c 19.10DBRU 最新补丁升级看这一篇就够了

ASM 管理的内部工具:KFED、KFOD、AMDU

性能优化|关于数据库历史性能问题的一道面试题

一线运维 DBA 五年经验常用 SQL 大全(二)

ORA-00349|激活 ADG 备库时遇到的问题

Oracle 轻量级实时监控工具 oratop

MySQL OCP 认证考试你知道吗?

Oracle 19C RAC 安装遇到的坑

Oracle 19C MAA 搭建指南

Oracle 每日一题系列合集

百花齐放的国产数据库


继续滑动看下一个

关于 ASM 中出现 'DB_UNKNOWN' 目录的说明

JiekeXu JiekeXu DBA之路
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存